<?php
//   +----------------------------------------------------------------------
//   | Copyright (c) 2015-2025 http://www.hdphp.cn All rights reserved.
//   | Licensed ( http://www.hdphp.cn/licenses/ )
//   | Author: Jack <sophia2152@qq.com>
//   | 官方网址: http://www.hdphp.cn
//   | 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用。
//   | 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
//   +----------------------------------------------------------------------

// 全局应用公共文件
if (!function_exists('p')) {
    /**
     * 注释：打印函数
     * 创建人：Jack
     * 创建时间：2023/7/26 17:25
     * @param $arr
     * @return void
     */
    function p($arr)
    {
        echo '<pre>' . print_r($arr, true) . '</pre>';
    }
}

if (!function_exists('random_string')) {
    /**
     * 注释：生成随机字符串
     * 创建人：Jack
     * 创建时间：2023/7/30 9:18
     * @param string $type type of random string.  basic, md5, sha1, diy
     * @param int    $len  number of characters
     * @param string $string
     * @return int|string|void
     */
    function random_string(string $type = 'basic', int $len = 8, string $string = '0123456789')
    {
        if ($type == 'basic') {
            return mt_rand();
        } else if ($type == 'md5') {
            return md5(uniqid(mt_rand()));
        } else if ($type == 'sha1') {
            return sha1(uniqid(mt_rand(), TRUE));
        } else if ($type == 'diy') {
            return substr(str_shuffle(str_repeat($string, ceil($len / strlen($string)))), 0, $len);
        }
    }
}

if (!function_exists('check_username')) {
    /**
     * 注释：检查用户名是否合规
     * 创建人：Jack
     * 创建时间：2023/7/30 9:38
     * @param string $username 要检查的用户名
     * @return bool
     */
    function check_username(string $username)
    {
        $strlen = strlen($username);
        if ($strlen < 2 || $strlen > 20) {
            return false;
        } else if (!preg_match("/^[a-z0-9\x7f-\xff][a-z0-9_\x7f-\xff]*[a-z0-9\x7f-\xff]$/i", $username)) {
            return false;
        }
        return true;
    }
}

if (!function_exists('check_phone')) {
    /**
     * 注释：检查是否是手机号码 仅验证格式是否准确，不能验证是否真实存在
     * 创建人：Jack
     * 创建时间：2023/7/30 9:27
     * @param string $phone 手机号码
     * @return bool
     */
    function check_phone(string $phone)
    {
        return strlen($phone) == 11 && preg_match("/^1[3456789]\d{9}$/", $phone);
    }
}

if (!function_exists('check_mail')) {
    /**
     * 注释：邮箱验证
     * 创建人：Jack
     * 创建时间：2023/7/30 9:37
     * @param string $mail
     * @return bool
     */
    function check_mail(string $mail)
    {
        if (filter_var($mail, FILTER_VALIDATE_EMAIL)) {
            return true;
        } else {
            return false;
        }
    }
}

if (!function_exists('getLang')) {
    /**
     * 注释：多语言
     * 创建人：Jack
     * 创建时间：2023/7/29 15:22
     * @param       $errcode
     * @param array $replace
     * @return array|mixed|string|string[]
     */
    function getLang($errcode, array $replace = [])
    {
        try {
            // 获取返回文字
            $message = (string)(lang($errcode) ?? 'Code Error');
            // 替换变量
            if (!empty($replace) && is_array($replace)) {
                // 关联索引解析
                $key = array_keys($replace);
                foreach ($key as &$v) {
                    $v = "{:{$v}}";
                }
                $message = str_replace($key, $replace, $message);
            }

            return $message;

        } catch (\Throwable $e) {
            \think\facade\Log::error('获取语言errcode：' . $errcode . '发成错误，错误原因是：' . json_encode([
                    'file' => $e->getFile(),
                    'message' => $e->getMessage(),
                    'line' => $e->getLine()
                ]));

            return $errcode;
        }
    }
}

if (!function_exists('get_tree_children')) {
    /**
     * 注释：子菜单
     * 创建人：Jack
     * 创建时间：2023/8/1 10:38
     * @param array  $data         数据
     * @param string $childrenname 子数据名
     * @param string $keyName      数据key名
     * @param string $pidName      数据上级key名
     * @return array
     */
    function get_tree_children(array $data, string $childrenname = 'children', string $keyName = 'id', string $pidName = 'pid')
    {
        $list = [];
        foreach ($data as $value) {
            $list[$value[$keyName]] = $value;
        }
        static $tree = []; // 格式化好的树
        foreach ($list as $item) {
            if (isset($list[$item[$pidName]])) {
                $list[$item[$pidName]][$childrenname][] = &$list[$item[$keyName]];
            } else {
                $tree[] = &$list[$item[$keyName]];
            }
        }
        return $tree;
    }
}

if (!function_exists('get_tree_children_value')) {
    /**
     * 注释：get_tree_children_value
     * 创建人：Jack
     * 创建时间：2023/8/1 11:05
     * @param array  $data
     * @param        $value
     * @param string $childrenname
     * @param string $keyName
     * @param array  $childrenValue
     * @return array
     */
    function get_tree_children_value(array $data, $value, string $childrenname = 'children', string $keyName = 'id', array &$childrenValue = [])
    {
        foreach ($data as $item) {
            $childrenData = $item[$childrenname] ?? [];
            if (count($childrenData)) {
                return get_tree_children_value($childrenData, $childrenname, $keyName, $childrenValue);
            } else {
                if ($item[$keyName] == $value) {
                    $childrenValue[] = $item['value'];
                }
            }
        }
        return $childrenValue;
    }
}

if (!function_exists('get_tree_value')) {
    /**
     * 注释：get_tree_value
     * 创建人：Jack
     * 创建时间：2023/8/1 11:02
     * @param array $data
     * @param       $value
     * @param array $childrenValue
     * @return array
     */
    function get_tree_value(array $data, $value, array &$childrenValue = [])
    {
        foreach ($data as &$item) {
            if ($item['value'] == $value) {
                $childrenValue[] = $item['value'];
                if ($item['pid']) {
                    $value = $item['pid'];
                    unset($item);
                    return get_tree_value($data, $value, $childrenValue);
                }
            }
        }
        return $childrenValue;
    }
}


if (!function_exists('get_version')) {
    /**
     * 注释：获取系统版本号
     * 创建人：Jack
     * 创建时间：2023/7/29 7:47 PM
     * @param string $default
     * @return mixed|string
     */
    function get_version(string $default = 'v1.0.0')
    {
        try {
            $version = parse_ini_file(app()->getRootPath() . '.version');
            return $version['version'] ?? $default;
        } catch (\Throwable $e) {
            return $default;
        }
    }
}